2023/12/232451字符

运算符

扩展运算符

数组展开

let arr = [1,2,3,4,5,7,3]
console.log(...arr);    //--> 1, 2, 3, 4, 5, 7, 3

字符串展开

let str = 'bozai'
console.log(...str);  //--> b o z a i
console.log([...str]);   //--> ["b", "o", "z", "a", "i"]

数组展开并合并

let a = [1,2,3]
let b = [4,5]
console.log({...a});  //--> {0: 1, 1: 2, 2: 3}
console.log({...a, ...b});   //--> {'0': 2, '1': 4, '2': 3}

实现浅层克隆

let obj1 = {
    name: 'bozai',
    age: 18,
}
let obj2 = {
    ...obj1,  // 浅层克隆 ES7提出
}

利用扩展运算符实现数组排序

function show3 (...a) {
    console.log(a.sort());
}
show3(4, 2, 3, 1, 5);  //--> [1, 2, 3, 4, 5]

打包剩余参数

function show4(a, b, ...c){  // 将剩余参数打包
    console.log(a, b, c);
}
show4(1, 2, 3, 4, 5);  //--> 1 2 [3, 4, 5]
const obj = {x, y, ...z} = {x : 1, y : 2, a : 3, b : 4};
console.log(obj);  //--> {x: 1, y: 2, a: 3, b: 4}

对象转数组

let obj2 = {
    "name": "cys",
    "age": 18,
    "sex": "man",
    [Symbol.iterator]: function () {
        const self = this;
        let keys = Object.keys(obj2)
        let index = 0;
        let len = keys.length
        return {
            next: function () {  // 实现next
                if (index < len) {
                    return {  // 遍历中
                        value: self[keys[index++]],
                        done: false  // 表示遍历没有结束,done设置为fasle
                    }
                } else {
                    return {  // 遍历结束
                        value: undefined,  // 结束后,返回undefined
                        done: true  // done设置为true,表示遍历结束
                    }
                }
            }
        }
    }
}
console.log([...obj2]);  //--> ["cys", 18, "man"]
console.log({...obj2});  //--> {name: "cys", age: 18, sex: "man", Symbol(Symbol.iterator): ƒ}

赋值运算符

符号 作用
??= 空赋值运算符:类型为 undefinednull 赋值
&&= 且 赋值:&&= 前类型为 true 时进行赋值
||= 或 赋值:`